package com.imooc.config;

import com.imooc.service.OrderService;
import com.imooc.utils.DateUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;

/**
 * 订单定时任务
 * @author gcq
 * @Create 2022-01-24
 */
@Component
public class OrderJob {

    @Autowired
    private OrderService orderService;

    /**
     * 定时任务关闭超期支付订单，会存在弊端
     * 1、时间差、不严谨
     *      10:39下单,11:00检查不足一个小时，12:00检查超过一小时多余39分钟
     * 2、不支持集群
     *      单机没毛病，使用集群后，多个定时任务，
     *      解决方案：
     *          1、只是用一台计算机节点，单独运行所有的定时任务
     * 3、会对数据库全表扫描，影响数据库性能
     * 后续课程涉及到消息队列 MQ->RabbitMQ、RocketM、Kafka
     *      延时队列
     *      10:12分下单，未付款10状态，11:12检查 直接更改订单状态
     */
    @Scheduled(cron = "0/3 * * * * ?")
    public void autoCloseOrder() {
        orderService.closeOrder();
        System.out.println("执行定时任务，当前时间为：" + DateUtil.getCurrentDateString(DateUtil.DATETIME_PATTERN));
    }
}